package main;


import main.disk.Disk;
import main.disk.DiskException;
import main.fat.FAT;
import main.struct.DirEntry;

/**
 * 文件系统主类
 * 协调磁盘、FAT和目录操作
 */
public class FileSystem {
    private Disk disk;
    private FAT fat;
    private boolean initialized;

    /**
     * 初始化文件系统
     * @param diskFileName 磁盘文件名
     * @param createNew 是否创建新文件系统
     * @throws DiskException 磁盘操作异常
     */
    public void initialize(String diskFileName, boolean createNew) throws DiskException {
        try {
            // 创建或打开磁盘
            disk = new Disk(diskFileName, createNew);

            // 创建或加载FAT
            fat = new FAT(disk, createNew);

            initialized = true;
            System.out.println("文件系统初始化成功");
            System.out.println("磁盘大小: " + disk.getTotalSize() + " 字节");
            System.out.println("空闲块数: " + fat.getFreeBlockCount());

        } catch (DiskException e) {
            initialized = false;
            throw new DiskException("文件系统初始化失败: " + e.getMessage(), e);
        }
    }

    /**
     * 关闭文件系统
     */
    public void shutdown() {
        if (disk != null) {
            try {
                // 确保FAT最新更改已保存
                if (fat != null) {
                    fat.saveFATToDisk();
                }
                disk.close();
                System.out.println("文件系统已安全关闭");
            } catch (DiskException e) {
                System.err.println("关闭文件系统时出错: " + e.getMessage());
            }
        }
    }

    /**
     * 获取磁盘实例
     * @return 磁盘实例
     */
    public Disk getDisk() {
        return disk;
    }

    /**
     * 获取FAT实例
     * @return FAT实例
     */
    public FAT getFat() {
        return fat;
    }

    /**
     * 检查文件系统是否已初始化
     * @return 是否已初始化
     */
    public boolean isInitialized() {
        return initialized;
    }
}
